home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 749 / phxass / phxass.doc < prev    next >
Text File  |  1995-03-18  |  27KB  |  793 lines

  1. last change: 27-Sep-92
  2.  
  3.              ********************************
  4.              *                    *
  5.              *       P h x A s s      V 2.xx    *
  6.              *                    *
  7.              *      MC68000 Macro Assembler   *
  8.              *                    *
  9.              *      Written by Frank Wille    *
  10.              *                    *
  11.              ********************************
  12.  
  13.  
  14.  
  15. Preface
  16. =======
  17.  
  18. PhxAss is FREEWARE and © copyright 1992 by Frank Wille. Commercial usage of
  19. this program, without a written permission of the author, is strictly
  20. forbidden !
  21.  
  22. Most assemblers which support Sections, XDefs, XRefs, etc. can't be used for
  23. assembling programs to absolute addresses or are missing an Incbin directive.
  24. Other assemblers (like SEKA) don't support the Amiga-DOS object file format or
  25. are missing an Include directive.
  26.  
  27. It was my aim to write an assembler which supports all the important directives
  28. like SECTION, XREF, XDEF, INCLUDE, ORG, INCBIN, etc. and which can assemble
  29. absolute and relocatable code in the same way. Apart from that the assembler
  30. should be able to generate code using the small-code and/or small-data model.
  31.  
  32. PhxAss understands nearly all of the standard assembler directives, making it
  33. easy to convert source code from other assemblers. In addition, all directives
  34. directives generated by the Aztec-C compiler are processed correctly. This
  35. makes it possible to assemble Aztec-C source code with (the faster) PhxAss
  36. instead of Manx-AS.
  37.  
  38.  
  39.  
  40. Starting PhxAss
  41. ===============
  42.  
  43. Start the assembler by entering the command line:
  44.  
  45.    PhxAss [<-options>] <filename> [<-options>]
  46.  
  47. where [<-options>] specify optional parameters and <filename> is the name of
  48. the file to be assembled. If no extension in <filename> is given, the assembler
  49. assumes ".asm" for being the extension. Some options cannot be specified before
  50. the file name (see Assembler Options).
  51. <filename> must be the name of an assembler source code file. The source code
  52. must be an ASCII text file where any line ends with a linefeed ($0a) character
  53. (the format, which all Amiga editors generate). TAB-codes ($09) are allowed.
  54. When the assenbler is running, it can be stopped at any time with CTRL-C.
  55.  
  56.  
  57.  
  58. Assembler Options
  59. =================
  60.  
  61. The following assembler options are supported by PhxAss V2.xx :
  62.  
  63. -o<filename>        Defines the name of the output file. If not specified,
  64.             PhxAss takes the source code's filename and replaces
  65.             its extension with ".o" .
  66.  
  67. -d            The names of all global labels of each section are
  68.             written to symbol data blocks. A debugger can use
  69.             these names instead of addresses.
  70.  
  71. -a            Enable auto-align for DC.x directives. All DC.W, DC.L,
  72.             etc. directives in the code will be automatically
  73.             aligned to word-boundaries.
  74.  
  75. -s<symname>[=value]    Predefines a symbol by SET directive. If the value is
  76.             missing, the symbol will be set to 1.
  77.  
  78. -e[<filename>]        Generates an equates file. If <filename> is missing,
  79.             the name of the source code with extension ".equ" will
  80.             be used. Cannot be specified before the name of the
  81.             source code.
  82.  
  83. -l[<filename>]        Generates a listing file. If <filename> is missing, the
  84.             name of the source code with extension ".lst" will be
  85.             used. Cannot be specified before the name of the source
  86.             code.
  87.  
  88. -x            Includes a reference list of all global symbols in the
  89.             listing file. If no listing file was opened, this
  90.             option will cause an error.
  91.  
  92. -p[<lines>]        Sets the page length for equates and listing files.
  93.             If <lines> isn't specified or set to zero, no form.
  94.             feed ($0c) characters will be generated. The default
  95.             value is 60 lines.
  96.  
  97. -i<path1>[,<path2>..]    Defines one or more include-paths which will be used
  98.             by the INCLUDE and INCBIN directives.
  99.  
  100. -h<name1>[,<name2>..]    Defines one or more INCLUDE directives at the top of
  101.             the source code.
  102.  
  103. -mf            Forces the whole code to use the large code and large
  104.             data model. NEAR directives within the source code
  105.             will be ignored.
  106.  
  107. -mn[<areg>][,<secnum>]    Forces the whole code to use the small data model.
  108.    or       [,S...]    <areg> (default: 4) specifies the number of the
  109.             address register which will be used as pointer to the
  110.             small data section. Only the registers A2-A6 can be
  111.             used. <secnum> is the number of the section which will
  112.             be the small data section (defaults to 0).
  113.             If a string, starting with a 'S' (f.ex. "SmallData"),
  114.             is specified instead of the section number, all Data
  115.             and Bss sections will be treated as a whole small data
  116.             section. They are coalesced by calling the linker with
  117.             the small data option.
  118.  
  119. -mc            Forces the whole code to use the small code model.
  120.             All JSR and JMP instructions which are referencing
  121.             external symbols are converted to BSR and BRA
  122.             instructions.
  123.  
  124. -n[<Flags>]        Sets the optimize flags. The following characters must
  125.             appear directly behind the '-n' :
  126.    n (normal)        These are the standard optimizations:
  127.                clr.l Dn        -> moveq #0,Dn
  128.                movem (one reg.)    -> move
  129.                add/sub #(1-8)    -> addq/subq
  130.                mulu/muls #0,Dn    -> moveq #0,Dn
  131.                move.l #(-128..127)    -> moveq
  132.                Absolute Long    -> PC Displace (when possible)
  133.    z (zero displace)    0(An) -> (An)
  134.    b (branches)     Bcc.L -> Bcc.S
  135.    s (left shifts)    lsl/asl  #1/2,Dn  -> add Dn,Dn [add Dn,Dn]
  136.    j (jumps)        jmp/jsr -> bra/bsr
  137.    p (force pea lea)    move.l #x,An      -> lea x,An
  138.             move.l #x,-(SP)   -> pea x
  139.    m (mulu/muls/divu)    mulu/muls #1,Dn -> swap clr swap / ext.l
  140.             mulu/muls #2..256,Dn -> .. lsl/asl ..
  141.             divu #2..256,Dn -> ror swap rol swap
  142.    x (bset/bclr/bchg)    bset #x,Dn -> ori.w  #(2^x),Dn     (for x = 0..15)
  143.             bclr #x,Dn -> andi.w #~(2^x),Dn
  144.             bchg #x,Dn -> eori.w #(2^x),Dn
  145.             The last two optimize flags (m and x) are 'wild'
  146.             optimizations. They generate the correct result, but
  147.             the status flags are 'wrong'.
  148.             To select all non-wild optimizations, write:
  149.               -nnzbsjp
  150.             There are two short cuts:
  151.    *            Selects all non-wild optimizations (-nnzbsjp).
  152.    !            Allows all optimizations possible (-nnzbsjpmx).
  153.             -n without parameters will forbid any optimizing.
  154.             If -n is not specified the assembler uses n,z,b and p.
  155.  
  156. -q            Quiet mode. The assembler makes no outputs until an
  157.             error occurs.
  158.  
  159.  
  160.  
  161. Programmer Information
  162. ======================
  163.  
  164.  
  165. 1. Comments
  166.  
  167. Comments start with a ';' or with a '*'.  The text which follows after the
  168. operand field is also a comment and doesn't need ';' or '*'.
  169. Example:
  170.      ; Comment text
  171.       moveq   #0,d0
  172.      ** This is a comment too **
  173.       nop                  ; comment
  174.       add.l   d0,d0           comment after operand field
  175.  
  176. If no operand field is given, e.g. after the NOP instruction, the comment must
  177. be preceded by a ';' or '*'. The example above without a semicolon after the
  178. NOP would make the assembler to treat 'comment' as its operand.
  179.  
  180.  
  181. 2. Labels
  182.  
  183. Labels must start in the first column of a line. The colon at the label's end
  184. is optional.
  185. Example:
  186.      Label:   moveq   #0,d0
  187.  
  188. Local labels have a '$' suffixed and are only valid between two global labels.
  189. Example:
  190.      Global1: add.w    d0,d1
  191.           bne.s    local$
  192.           rts
  193.      local$:  moveq    #-1,d0
  194.           rts
  195.      Global2:
  196.  
  197. The length for global and local labels is unlimited. Valid characters for the
  198. labels are: 'a'-'z', 'A'-'Z', '0'-'9' and '_' . The first character can be a
  199. '.', but global labels cannot start with a digit.
  200.  
  201.  
  202. 3. Executable M68000 instructions
  203.  
  204. They have the general format:
  205.      label      operation   operand
  206.  
  207. PhxAss recognizes all operations found in Motorola's 8-/16-/32-bit Micro-
  208. processor User's Manual and all of the common additions and short forms like
  209. BHS instead of BCC, BLO instead of BCS, MOVE instead of MOVEA, ADD instead of
  210. ADDI, etc. . In the current version only MC68000 instructions are supported.
  211. The operand field consists of one or two expressions seperated by a comma with
  212. no imbedded spaces.
  213.  
  214.  
  215. 4. Expressions
  216.  
  217. Expressions consist of symbols and constants. Symbols can be absolute,
  218. relocatable or external. The arithmetic operations supported by PhxAss are
  219. (from highest to lowest precedence) :
  220.  
  221.  ~    not (unary)     -    negation (unary)
  222.  <<   shift left     >>   shift right
  223.  *    multiplication     /    division               //   modulo
  224.  &    and         |    or ('!' also allowed)    ^    exclusive or
  225.  -    subtraction     +    addition
  226.  [ ]  brackets
  227.  
  228. An important difference to other assemblers is, that no parentheses ( '(',')' )
  229. are allowed in PhxAss expressions. Use brackets ( '[',']' ) instead.
  230. For absolute symbols and constants (which are absolute too), all arithmetic
  231. operations are allowed.
  232. If relocatables or externals occur in the expression, only subtraction and
  233. addition is possible with some restrictions:
  234.  
  235.    reloc - abs        extern - abs         reloc - reloc
  236.    reloc + abs        extern + abs         abs + reloc      abs + extern
  237.  
  238. are defined, the others are illegal.
  239.  
  240. There are five types of constants:
  241. Hexadecimal, preceded by a '$', consists of '0'-'9' and 'A'-'F' (or 'a'-'f')
  242. Decimal, consists of '0'-'9'
  243. Octal, preceded by a '@', consists of '0'-'7'
  244. Binary, preceded by a '%', consists of '0' and '1'
  245. String, embedded by ' or ", consists of one to four characters.
  246. The character '\' is an escape-symbol, which can generate the following codes:
  247.    \\     the '\'-character itself
  248.    \'    character #39 (single quote)
  249.    \"    character #34 (quote)
  250.    \0     character #0  (string terminator)
  251.    \n     character #10 (line feed)
  252.    \f     character #12 (formular feed)
  253.    \b     character #8  (backspace)
  254.    \t     character #9  (tabulator)
  255.    \r     character #13 (carriage return)
  256.  
  257.  
  258. 5. Directives
  259.  
  260. The following paragraphs describe all directives that are supported by the
  261. assembler.
  262.  
  263. EQU
  264.      symbol   equ       <expression>
  265.      symbol   =       <expression>
  266.       The expression will be assigned to the symbol.
  267.  
  268. EQU.x
  269.      symbol   equ.x    <float symbol or constant>
  270.      symbol   =.x       <float symbol or constant>
  271.       An equate with the extension .d,.f,.p,.s or .x will assign the value
  272.       of a floating-point expression to the symbol. No arithmetic operations
  273.       are allowed with floating-point. The expression must be a constant or
  274.       another floating-point symbol.
  275.  
  276. EQUR
  277.      symbol   equr       <register>
  278.       This directive assigns a register (D0-D7,A0-A7 or SP) to the symbol.
  279.  
  280. REG
  281.      symbol   reg       <register list>
  282.       This directive assigns the value of the register list to the symbol.
  283.       Valid register lists contain several register names (see EQUR)
  284.       separated by the '/' character. The '-' character defines a range of
  285.       registers. The following are valid register lists:
  286.      a1/a3-a5/d0/d2/d4
  287.      a2-a6/d0-d7
  288.  
  289. SET
  290.      symbol   set       <absolute expression>
  291.       This directive assigns the value of the expression to the symbol. No
  292.       relocatables or externals are allowed within the expression. A symbol
  293.       defined by a SET directive may change its value by another SET.
  294.       There are some set-symbols which are defined by PhxAss:
  295.       _PHXASS_      set       1
  296.       _VERSION_   set       version<<16+revision
  297.       According to the connected processor and co-processor PhxAss will set
  298.       _MC68000_, _MC68010_, _MC68020_ and  _MC68881_. NARG is zero outside a
  299.       macro. Within a macro NARG is set to the number of specified arguments.
  300.  
  301. TTL
  302.           ttl       <name>
  303.       This directive sets the name of the object file unit which the assembler
  304.       will generate. By default, no name will be set (length 0).
  305.  
  306.  
  307. LIST
  308.       The following source code will be written to the listing file.
  309.  
  310. NOLIST
  311.       The following source code will not be written to the listing file.
  312.  
  313. OPT
  314.           opt       <optimize flags>
  315.       Changes optimization. For a listing of all optimize flags, see Assembler
  316.       Options.
  317.  
  318. MACRO, ENDM
  319.      symbol   macro
  320.           ...text...
  321.           endm
  322.           macro    symbol
  323.           ...text...
  324.           endm
  325.       This directive assigns a macro to the symbol. The symbol may appear on
  326.       the left or the right side of the directive. The text between the MACRO
  327.       and ENDM directives will be inserted into the source code when the
  328.       assembler discovers the symbol. When calling the macro, up to nine
  329.       arguments, separated by a comma, can be specified in the operand field.
  330.       They are referenced in the macro text as '\1' through '\9'. '\0' is
  331.       reserved for the extension of the macro symbol. Example:
  332.      bhs      macro
  333.           bcc.\0   \1
  334.           endm
  335.       This macro can be called by:    bhs.s     label
  336.       ".s" will be assigned to \0 and "label" will be assigned to \1.
  337.       A "\@" within the macro is replaced by text of the form "nnn", where
  338.       nnn is a unique three-digit number for each macro call. Labels within a
  339.       macro should consist of "\@", because defining labels twice is illegal.
  340.  
  341. MEXIT
  342.       Upon encountering this directive within a macro, the assembler scans for
  343.       the ENDM directive and leaves the macro.
  344.  
  345. END
  346.       In pass one the assembler ignores the rest of the source code and starts
  347.       pass two. In pass two the assembler closes all files and terminates.
  348.       By default the assembler terminates at end of file.
  349.  
  350. FAIL
  351.       The assembler displays the error "69 Assembly aborted !" and terminates.
  352.  
  353. ECHO
  354.           echo       <string>
  355.       The assembler echoes the string. If <string> isn't specified, only a
  356.       newline is echoed.
  357.  
  358. SECTION
  359.           section  <name>[,<type>[,<memflag>]]
  360.       The following code will be placed in the section named <name>. There
  361.       are three section types: CODE, DATA and BSS. CODE contains the executable
  362.       M68000 instructions, DATA contains initialized data and BSS contains un-
  363.       initialized data (set to zero before the program is started). By default
  364.       <type> is set to CODE. The section will be loaded to the memory indicated
  365.       by the <memflag> argument. This can be FAST or CHIP. By default the
  366.       section will be loaded to the memory with the highest priority.
  367.       Creating a section lets the assembler change into relocatable mode. In
  368.       this mode the following directives are illegal:
  369.       org, load, file, trackdisk
  370.  
  371. CODE, CSEG
  372.       These directives correspond to:  section    "CODE",code
  373.  
  374. DATA, DSEG
  375.       These directives correspond to:  section    "DATA",data
  376.  
  377. BSS (1)
  378.       This directive corresponds to:   section    "BSS",bss
  379.  
  380. BSS (2)
  381.           bss       symbol,<size>
  382.       BSS with arguments does not start a section. It defines a symbol to be
  383.       in the BSS-section, reserves <size> bytes in this section and assigns
  384.       the address of the first byte to the symbol.
  385.  
  386. GLOBAL
  387.           global   symbol,<size>
  388.       This directive does the same as BSS symbol,<size>. In addition GLOBAL
  389.       will declare the symbol as XDEF (ext_def).
  390.  
  391. INCLUDE
  392.           include  <filename>
  393.       This directive causes the assembler to suspend the assembly of the
  394.       current file and to assemble the file named <filename>. When done, the
  395.       assembler continues assembling the original file.
  396.       If PhxAss can't find the include file, it first searches within the
  397.       include directory defined by the environment variable PHXASSINC. Then
  398.       it searches within the include directories defined by the -i assembler
  399.       option.
  400.  
  401. INCBIN
  402.           incbin   <filename>
  403.       This directive causes the assembler to include a binary file into the
  404.       current section (f.ex. graphics, samples or trigonometrical tables).
  405.       The assembler searches in the same include directories like INCLUDE.
  406.  
  407. XREF
  408.           xref       symbol1[,symbol2,...]
  409.       This directive tells the assembler that the specified symbols are
  410.       externally defined and will be inserted by the linker.
  411.  
  412. NREF
  413.           nref       symbol1[,symbol2,...]
  414.       This directive does the same like XREF, but the assembler is forced to
  415.       use these symbols as small-data relocatables.
  416.  
  417. XDEF
  418.           xdef       symbol1[,symbol2,...]
  419.       This directive causes the assembler to add the names and values of the
  420.       specified symbols to the external-block of the object file. The linker
  421.       can read the values of these symbols and insert them into other object
  422.       files.
  423.  
  424. PUBLIC
  425.           public   symbol1[,symbol2,...]
  426.       When the specified symbols are defined in the current code, PUBLIC will
  427.       do the same like XDEF. When the symbols are unknown, PUBLIC will do the
  428.       same like XREF.
  429.  
  430. ORG
  431.           org       address
  432.       Defines the origin of the following code and lets the assembler change
  433.       into absolute mode. Since V1.8 several ORG directives are allowed and
  434.       each one can be seen as a new section. The following directives are
  435.       illegal in absolute mode:
  436.       ttl, code, cseg, data, dseg, bss, section, xref, nref, xdef, public.
  437.  
  438. LOAD
  439.           load       address
  440.       After assembly is done, the executable code will be loaded to this
  441.       address. By default the code will be loaded to the address which was
  442.       specified as origin.
  443.  
  444. FILE
  445.           file       <filename>
  446.       After assembly is done, the executable code will be written to the file
  447.       named <filename>.
  448.  
  449. TRACKDISK
  450.           trackdisk <drive>,<startblock>[,<offset>]
  451.       After assembly is done, the executable code will be written directly to
  452.       floppy disk using the 'trackdisk.device'. <drive> is valid from 0 to 3.
  453.       <startblock> is valid from 0 to 1759. <offset>, which is zero by default,
  454.       specifies the byte-offset within a block and is valid from 0 to 511.
  455.  
  456. NEAR
  457.           near       [An[,<secnum> | SmallData]]
  458.       This directive initializes the parameters used by the small-data model.
  459.       NEAR with arguments may appear only once in the whole source code. After
  460.       initializing the small-data model, it can be switched on and off by NEAR
  461.       and FAR without arguments. The first argument, the address-register, is
  462.       valid from A2 to A6 and will be A4 by default. <secnum>, which defaults
  463.       to zero, specifies the number of the section which will be accessed by
  464.       address register indirect with displacement. If <secnum> is a string
  465.       starting with 'S' or 's', all Data and Bss sections will be accessed in
  466.       small-data mode.
  467.           near       code
  468.       If the argument equals to the string "CODE" the assembler activates the
  469.       small-code model.
  470.  
  471. FAR
  472.       This directive turns off the small-data model when active.
  473.  
  474. INITNEAR
  475.       This directive inserts two M68000 instructions into the code which will
  476.       initialize the small-data model depending on the parameters set by the
  477.       NEAR directive. The assembler will generate this code (10 bytes):
  478.           lea       SmallDataBase,An
  479.           lea       32766(An),An
  480.  
  481. DC
  482.      label      dc.x       <value>[,<value>,...]
  483.      label      dc.b       "string"[,...]
  484.       The DC (Define Constant) directive causes one or more fields of memory
  485.       to be allocated and initialized. Each field has the same size, specified
  486.       by the extension of the directive. Each byte, word or longword <value>
  487.       can be an expression and may contain forward references. For floating-
  488.       point values, only constants are allowed. The following extensions are
  489.       valid:
  490.       .B    (1 byte)    Byte          .W    (2 bytes)   Word
  491.       .L    (4 bytes)    Longword      .F    (4 bytes)   Fast Floating Point
  492.       .S    (4 bytes)    Single Precision  .D    (8 bytes)   Double Precision
  493.       .X    (12 bytes)    Ext. Precision      .P    (12 bytes)  Packed BCD
  494.       If the extension is .B, .W or .L several values can be expressed by a
  495.       string, but when using word- or longword-size the string must be aligned.
  496.  
  497. DCB, BLK
  498.      label      dcb.x    <num>[,<fill>]
  499.      label      blk.x    <num>[,<fill>]
  500.       These directives allocate a block of memory having <num> entries. The
  501.       available entry-sizes are the same like above. The block will be
  502.       initialized with <fill> which is assumed to be zero when missing.
  503.  
  504. DS
  505.      label      ds.x       <num>
  506.       This directive allocates a block of memory having <num> entries and
  507.       initializes each field with zero. See DCB, BLK.
  508.  
  509. CNOP
  510.           cnop       <offset>,<align>
  511.       This directive aligns the address of the following code to <align>. Then
  512.       the <offset> is added. Example:      cnop    2,4   . This example would
  513.       align the next address two bytes after the next longword boundary.
  514.       If <align> is greater than two, the optimization for the whole section
  515.       will be disabled, but since CNOP will be used mainly in data sections it
  516.       should be no problem, because data cannot be optimized.
  517.  
  518. EVEN
  519.       This directive equals to    cnop   0,2  which will make the address word-
  520.       aligned.
  521.  
  522. IFcond, ELSE, ENDIF, ENDC
  523.       These directives support conditional assembly. The general form of the
  524.       IF directive is:
  525.           ifcond      <expression> or symbol
  526.           ...
  527.           [else
  528.           ...]
  529.           endc (or endif)
  530.       PhxAss supports the following conditions:
  531.      IFC "string1","string2" compares two strings. This is useful within
  532.                  macros, when the strings contain macro-
  533.                  arguments '\x' .
  534.      IFD/IFND symbol     Tests if the symbol is defined (undefined).
  535.      IFEQ/IFNE <exp>     Tests if <exp> is zero (not zero).
  536.      IFGT/IFLT <exp>     Tests if <exp> is greater (less) than zero.
  537.      IFGE/IFLE <exp>     Tests if <exp> is greater (less) than or
  538.                  equal to zero.
  539.  
  540.  
  541.  
  542. Assembler Errors
  543. ================
  544.  
  545. In the current version of PhxAss the following errors can be generated:
  546.  
  547. 01 Out of memory
  548.  
  549. 02 Only ONE source file can be assembled
  550.    Example: phxass file1 file2     -> Error 02
  551.  
  552. 03 Listing file option was declared twice
  553.  
  554. 04 Need source file for this option
  555.    Example: phxass -e srcfile    or   phxass -l srcfile     -> Error 04
  556.         phxass srcfile -e    -> ok
  557.  
  558. 05 Equates file option was declared twice
  559.  
  560. 06 Need filename after -o option
  561.  
  562. 07 Need filename after -h option
  563.  
  564. 08 Need directory name after -i option
  565.  
  566. 09 Illegal model. Use F for far or N[2-6][,SecNum] for near
  567.  
  568. 10 The near data model accepts only a2-a6 for base register
  569.  
  570. 11 Missing source filename
  571.  
  572. 12 File doesn't exist
  573.  
  574. 13 Missing include filename
  575.  
  576. 14 Read error
  577.  
  578. 15 String buffer overflow
  579.    Source code lines are limited to 79 characters.
  580.  
  581. 16 Too many sections
  582.    Maximum is 255 sections.
  583.  
  584. 17 Symbol can't be declared as external
  585.    XDEF can only be used with absolute or relocatable symbols.
  586.  
  587. 18 Symbol was declared twice
  588.  
  589. 19 Unable to declare XREF-symbol
  590.    A symbol, which is defined in the current source code, can't be an external.
  591.  
  592. 20 Illegal opcode extension
  593.    Legal: .b .w .l .s .f .d .x .p
  594.  
  595. 21 Illegal macro parameter
  596.    Possible parameters are: \0 (opcode extension), \1 - \9 and \@
  597.  
  598. 22 Illegal characters in label
  599.    See Labels chapter in Programmer Information.
  600.  
  601. 23 Unknown directive
  602.    The opcode is whether a 68000-mnemonic nor an assembler directive or macro.
  603.  
  604. 24 Too many parameters for a macro
  605.    Nine parameters ( \1 to \9 ) are possible.
  606.  
  607. 25 Can't open trackdisk.device
  608.  
  609. 26 Argument buffer overflow
  610.    Arguments are limited to 79 chracters.
  611.  
  612. 27 Bad register list
  613.    Valid register lists: d0-d3    d3-d4/a2  d2/d3/a4-a6  a2/a3/a4  d7  a0/d2
  614.  
  615. 28 Missing label
  616.    This directive requires a label.
  617.  
  618. 29 Illegal seperator for a register list
  619.    Valid seperators are '-' and '/'.
  620.  
  621. 30 SET, MACRO, XDEF, XREF and PUBLIC are illegal for a local symbol
  622.  
  623. 31 Not a register (try d0-d7 or a0-a7 or sp)
  624.  
  625. 32 More ')'-brackets than '('
  626.  
  627. 33 Unknown addressing mode for this operation
  628.    See Motorola' 8-/16-/32-bit Microprocessor User's Manual for a description
  629.    of all addressing modes.
  630.  
  631. 34 Illegal addressing mode
  632.    Example:   move.b  d0,a1  /    move  usp,d2  /  clr.w    (d3)+    -> Error 34
  633.  
  634. 35 Can't use macro in operand
  635.    Macros must be used as opcodes.
  636.  
  637. 36 Undefined symbol
  638.  
  639. 37 Missing register
  640.    Example:   move.w  d0,   -> Error 37
  641.  
  642. 38 Need data-register
  643.  
  644. 39 Need address-register
  645.  
  646. 40 Word at odd address
  647.    Example:   dc.b "Hallo"
  648.           dc.w 0        -> Error 40
  649.    Insert CNOP 0,2 or EVEN after string-constants.
  650.  
  651. 41 Syntax error in operand
  652.  
  653. 42 Relocatability error
  654.    Example:   move.l  label(pc),d0  , where label is not a reloc. and/or label
  655.    is not defined in the current section  -> Error 42
  656.  
  657. 43 Too large distance
  658.    Example:   move.w  50000(a0),d0   -> Error 43
  659.    Too large distance for a displacement by indirect addressing or branches.
  660.    Short branches have a range of +126/-128 bytes. Long branches have a range
  661.    of +32766/-32768 bytes.
  662.  
  663. 44 Displacement expected
  664.    Example:   label: move.l  label(a2),d1   -> Error 44
  665.  
  666. 45 Valid address expected
  667.    A program-address was expected.
  668.  
  669. 46 Missing argument
  670.  
  671. 47 Need numeric symbol
  672.  
  673. 48 Symbols must be declared in the same section
  674.    Example:   bra  label   , where label is not defined in the current section
  675.    -> Error 48
  676.  
  677. 49 Only one distance allowed
  678.    Expression can't contain several distances.
  679.    Example:   move.l  #[label1-label2]+[label3-label4],d0   -> Error 49
  680.  
  681. 50 Missing ']'-bracket
  682.  
  683. 51 Expression stack overflow
  684.    A maximum of 128 arguments are allowed in one expression.
  685.  
  686. 52 Unable to negate an address
  687. 53 Can't use distance and reloc in the same expression
  688. 54 Can't shift an address
  689. 55 Can't multiply an address
  690. 56 Overflow during multiplication
  691. 57 Can't divide an address
  692. 58 Division by zero
  693. 59 No logical operation allowed on addresses
  694. 60 Need two addresses to make a distance
  695. 61 Unable to sum to addresses
  696.  
  697. 62 Write error
  698.  
  699. 63 Alignment error
  700.    Example:   dc.l "XYZ"   -> Error 63
  701.  
  702. 64 Can't subtract a XREF
  703.    Valid operations with externals:  ext + abs ,  abs + ext   and   ext - abs
  704.  
  705. 65 Impossible in absolute mode
  706.    These directive can't be used in absolute mode:
  707.    ttl, code, cseg, data, dseg, bss, section, xref, nref, xdef, public
  708.  
  709. 66 Unknown error (fatal program failure)
  710.    The assembler or its memory was corrupted by a faulty program running at
  711.    the same time.
  712.  
  713. 67 No externals in absolute mode
  714.    See 65.
  715.  
  716. 68 Out of range
  717.    Example:   addq.l  #9,d1   -> Error 68
  718.  
  719. 69 Assembly aborted
  720.    Generated by the FAIL directive.
  721.  
  722. 70 Missing ENDC/ENDIF
  723.  
  724. 71 Missing macro name
  725.  
  726. 72 Missing ENDM
  727.  
  728. 73 Can't define macro within a macro
  729.  
  730. 74 Unexpected ENDM
  731.  
  732. 75 Unexpected ENDC/ENDIF
  733.  
  734. 76 Impossible in relative mode
  735.    These directive can't be used in relative mode: org, file, load, trackdisk.
  736.  
  737. 77 Parameter buffer overflow
  738.    Parameters are limited to 79 characters.
  739.  
  740. 78 Can't open timer.device
  741.  
  742. 79 Unable to create file
  743.    Maybe the destination disk is write-protected.
  744.  
  745. 80 Need listing file to add references
  746.    -x option was specified without the -l option.
  747.  
  748. 81 No address allowed here
  749.    Example:   ds.l label   -> Error 81
  750.  
  751. 82 Illegal characters in symbol
  752.    See error 22.
  753.  
  754. 83 Source-code too large (max. 65535 lines)
  755.  
  756. 84 No floating point without mathieeedoubbas.library
  757.    To use floating point symbols, you must have the mathieeedoubbas.library
  758.    in your LIBS: directory.
  759.  
  760. 85 IEEE Double Precision Overflow/Underflow
  761. 86 IEEE Single Precision Overflow/Underflow
  762. 87 Motorola FFP Overflow/Underflow
  763. 88 Incompatible float types
  764. 89 Packed BCD Overflow/Underflow
  765.  
  766. 90 Can't mix LOAD, FILE and TRACKDISK
  767.    Example:   load $70000
  768.           file "mycode"   -> Error 90
  769.  
  770. 91 Near mode not activated
  771.    The near mode must be initialized first, before using the INITNEAR
  772.    directive.
  773.  
  774.  
  775.  
  776. Bugs
  777. ====
  778.  
  779. Known bugs in version V2.04 :
  780. Floating-point symbols defined by the EQU directive does not appear in the
  781. equates file (but who needs it ?).
  782.  
  783. I cannot guarentee that PhxAss is working with OS 2.0, because I did not have
  784. the opportunity to test it with that system.
  785.  
  786. If any errors or questions occur, please write to :
  787.  
  788.             Frank Wille
  789.             Auf dem Dreische 45
  790.             D-W-4900 Herford
  791.             GERMANY
  792.  
  793.